home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_geomview.idb / usr / freeware / catman / p_man / cat5 / geomview.Z / geomview
Encoding:
Text File  |  1999-01-26  |  59.5 KB  |  1,387 lines

  1.  
  2.  
  3.  
  4.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.       Geomview - Geomview command language
  10.  
  11.      NNNNOOOOTTTTEEEE
  12.       The material in this manual page also    appears    in the
  13.       Geomview manual.
  14.  
  15.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  16.       gcl: the Geomview Command Language
  17.       **********************************
  18.  
  19.       Gcl has the syntax of    lisp --    i.e. an    expression of the form (f a b
  20.        ...)    means pass the values of a, b, ... to the function f.
  21.       Gcl is very limited and is by    no means an implementation of lisp.  It
  22.       is simply a language for expressing commands to be executed in the order
  23.       given, rather    than a programming language.  It does not support variable
  24.       or function definition.
  25.  
  26.       Gcl is the language that Geomview understands    for files that it loads
  27.       as well as for communication with other programs.
  28.       To execute a gcl command interactively, you can bring    up the
  29.       *Commands* panel which lets you type in a command; Geomview
  30.       executes the command when you    hit the    return key.  Output from such
  31.       commands is printed to standard output.  Alternately,    you can    invoke
  32.       Geomview as `geomview    -c -' which causes it to read gcl commands
  33.       from standard    input.
  34.  
  35.       Gcl functions    return a value,    and you    can nest function calls    in ways
  36.       which    use this returned value.  For example
  37.            (f (g a b))
  38.       evaluates `(g    a b)' and then evaluates `(f x)' where `x'
  39.       is the result    returned by `(g    a b)'.    Geomview maintains these
  40.       return values    internally but does not    normally print them out.
  41.       To print out a return    value pass it to the `echo' function.
  42.       For example the `geomview-version' function returns a    string
  43.       representing the version of Geomview that is running,    and
  44.            (echo (geomview-version))
  45.       prints out this string.
  46.  
  47.       Many functions simply    return `t' for success or `nil'    for
  48.       failure; this    is the case if the documentation for the function does not
  49.       indicate otherwise.  These are the lisp symbols for true and false,
  50.       respectively.     (They correspond to the C variables `Lt' and
  51.       `Lnil' which you are likely to see if    you look at the    source code
  52.       for Geomview or some of the external modules.)
  53.  
  54.       In the descriptions of the commands below several references are made    to
  55.       "OOGL" formats.  OOGL    is the data description    language that Geomview
  56.       uses for describing geometry,    cameras, appearances, and other    basic
  57.       objects.  For    details    of the OOGL formats, *Note OOGL    File Formats::.
  58.       (Or equivalently, see    the oogl(5) manual page, distributed with Geomview
  59.       in the file man/cat5/oogl.5.
  60.  
  61.  
  62.  
  63.      Page 1                        (printed 12/22/98)
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  71.  
  72.  
  73.  
  74.       The gcl commands and argument    types are listed below.     Most
  75.       of the documentation in this section of the manual is    available within
  76.       Geomview via the `?' and `??'    commands.  The command `(?
  77.       COMMAND)' causes Geomview to print out a one-line summary of the
  78.       syntax of COMMAND, and `(?? COMMAND)'    prints out an
  79.       explanation of what COMMAND does.  You can include the wild-card
  80.       character `*'    in COMMAND to print information    for a group of
  81.       commands matching a pattern.    For example, `(?? *emodule*)' will
  82.       print    all information    about all commands containing the string
  83.       `emodule'.  `(? *)' will print a short list of all commands.
  84.  
  85.       Conventions Used In Describing Argument Types
  86.       =============================================
  87.  
  88.       The following    symbols    are used to describe argument types
  89.       in the documentation for gcl functions.
  90.  
  91.  
  92.       `APPEARANCE'
  93.            is an OOGL appearance specification.
  94.  
  95.       `CAM-ID'
  96.            is an ID    that refers to a camera.
  97.  
  98.       `CAMERA'
  99.            is an OOGL camera specification.
  100.  
  101.       `GEOM-ID'
  102.            is an ID    that refers to a geometry.
  103.  
  104.       `GEOMETRY'
  105.            is an OOGL geometry specification.
  106.  
  107.       `ID'
  108.            is a string which names a geometry or camera.  Besides
  109.            those you create, valid ones are:
  110.  
  111.  
  112.            ``World,    world, worldgeom, g0''
  113.             the    collection of all geom's
  114.  
  115.            `target'
  116.             selected target object (cam    or geom)
  117.  
  118.            `center'
  119.             selected center-of-motion object
  120.  
  121.            `targetcam'
  122.             last selected target camera
  123.  
  124.            `targetgeom'
  125.             last selected target geom
  126.  
  127.  
  128.  
  129.      Page 2                        (printed 12/22/98)
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  137.  
  138.  
  139.  
  140.            `focus'
  141.             camera where cursor    is (or most recently was)
  142.  
  143.            `allgeoms'
  144.             all    geom objects
  145.  
  146.            `allcams'
  147.             all    cameras
  148.  
  149.            ``default, defaultcam, prototype''
  150.             future cameras inherit default's settings
  151.  
  152.  
  153.            The following IDs are used to name coordinate systems,
  154.            e.g. in `pick' and `write' commands:
  155.  
  156.  
  157.            ``World,    world, worldgeom, g0''
  158.             the    world, within which all    other geoms live.
  159.  
  160.            `universe '
  161.             the    universe, in which the World, lights and cameras live.    Cameras'
  162.             world2cam transforms might better be called    universe2cam, etc.
  163.  
  164.            `self'
  165.             "this Geomview object".  Transform from an object to `self'    is the
  166.             identity; writing its geometry gives the object itself with    no
  167.             enclosing transform; picked    points appear in the object's coordinates.
  168.  
  169.            `primitive'
  170.             (for `pick'    only) Picked points appear in the coordinate system of the
  171.             lowest-level OOGL primitive.
  172.  
  173.  
  174.            A name is also an acceptable id.     Given names are made unique by
  175.            appending numbers if necessary (i.e. `foo<2>'). Every geom is also
  176.            named g[n] and every camera is also named c[n] (`g0' is always the
  177.            worldgeom): this    name is    used as    a prefix to keyboard commands and can
  178.            also be used as a gcl id.  Numbers are reused after an
  179.            object is deleted. Both names are shown in the Object browser.
  180.  
  181.       `STATEMENT'
  182.            represents a function call.  Function calls have    the form `(func    arg1
  183.            arg2 ...    )', where `func' is the    name of    the function and `arg1',
  184.            `arg2', ... are the arguments.
  185.  
  186.       `TRANSFORM'
  187.            is an OOGL 4x4 transformation matrix.
  188.  
  189.       `WINDOW'
  190.            is an OOGL winddow specification.
  191.  
  192.  
  193.  
  194.  
  195.      Page 3                        (printed 12/22/98)
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  203.  
  204.  
  205.  
  206.       Gcl Reference    Guide
  207.       ===================
  208.  
  209.  
  210.       `! is    a synonym for `shell''
  211.  
  212.       `(< EXPR1 EXPR2)'
  213.            Returns t if EXPR1 is less than EXPR2.  EXPR1 and EXPR2 should
  214.            be either both integers or floats, or both strings.
  215.  
  216.       `(= EXPR1 EXPR2)'
  217.            Returns t if EXPR1 is equal to EXPR2.  EXPR1 and    EXPR2 should
  218.            be either both integers or floats, or both strings.
  219.  
  220.       `(> EXPR1 EXPR2)'
  221.            Returns t if EXPR1 is greater than EXPR2.  EXPR1    and EXPR2 should
  222.            be either both integers or floats, or both strings.
  223.  
  224.       `(?  [command])'
  225.            Gives one-line usage summary for    `command'.
  226.            Command may include `*'s    as wildcards; see also `??'
  227.            One-line    command    help; lists names only if multiple commands match.
  228.            ? is a synonym for `help'
  229.  
  230.       `(?? command)     `command' may include `*' wildcards'
  231.            Prints more info    than `(? command)'.  ??    is a synonym
  232.            for `morehelp'.
  233.  
  234.       `| is    a synonym for `emodule-run'.'
  235.  
  236.       `(all    geometry)  returns a list of names of all geometry objects.'
  237.            Use e.g.    `(echo (all geometry))'    to print such a    list.
  238.       `(all    camera)     returns a list    of names of all    cameras.'
  239.       `(all    emodule    defined)  returns a list of all    defined    external modules.'
  240.       `(all    emodule    running)  returns a list of all    running    external modules.'
  241.  
  242.       `(ap-override    [on|off])'
  243.            Selects whether appearance controls should override objects' own
  244.            settings.  On by    default.  With no arguments, returns current setting.
  245.  
  246.       `(backcolor       CAM-ID R G B)'
  247.            Set the background color    of CAM-ID; R G B are numbers
  248.            between 0 and 1.
  249.  
  250.       `(background-image CAM-ID [FILENAME])'
  251.            Use the given image as the background of    camera CAM-ID (which must be a
  252.            real camera, not    `default' or `allcams'). Centers the image on
  253.            the window area.     Works only with GL and    OpenGL graphics.
  254.            Use "" for filename to remove background.  With no filename argument,
  255.            returns name of that window's current background    image, or "".
  256.            Any file    type acceptable    as a texture is    allowed, e.g. .ppm.gz, .sgi, etc.
  257.  
  258.  
  259.  
  260.  
  261.      Page 4                        (printed 12/22/98)
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  269.  
  270.  
  271.  
  272.       `(bbox-color       GEOM-ID R G B)'
  273.            Set the bounding-box color of GEOM-ID; R    G B are    numbers
  274.            between 0 and 1.
  275.  
  276.       `(bbox-draw       GEOM-ID [yes|no])'
  277.            Say whether GEOM-ID's bounding-box should be drawn; `yes' if omitted.
  278.  
  279.       `(camera       CAM-ID [CAMERA])'
  280.            Specify data for    CAM-ID;    CAMERA is a string giving an OOGL
  281.            camera specification.  If no camera CAM-ID exists,
  282.            it is created; in this case, the    second argument    is optional,
  283.            and if omitted, a default camera    is used.  See also: new-camera.
  284.  
  285.       `(camera-draw       CAM-ID [yes|no])'
  286.            Say whether or not cameras should be drawn in CAM-ID; `yes' if omitted.
  287.  
  288.       `(camera-prop    { geometry object }   [projective])'
  289.            Specify the object to be    shown when drawing other cameras.
  290.            By default, this    object is drawn    with its origin    at the camera,
  291.            and with    the camera looking toward the object's -Z axis.
  292.            With the    `projective' keyword, the camera's viewing projection is
  293.            also applied to the object; this    places the object's Z=-1 and Z=+1 at
  294.            near and    far clipping planes, with the viewing area -1<={X,Y}<=+1.
  295.            Example:     (camera-prop {    < cube } projective)
  296.  
  297.       `(camera-reset   CAM-ID)'
  298.            Reset CAM-ID to its default value.
  299.  
  300.       `(car    LIST)'
  301.            returns the first element of LIST.
  302.  
  303.       `(cdr    LIST)'
  304.            returns the list    obtained by removing the first element of LIST.
  305.  
  306.       `(clock)'
  307.            Returns the current time, in seconds, as    shown by this stream's clock.
  308.            See also    set-clock and sleep-until.
  309.  
  310.       `(command       INFILE [OUTFILE])'
  311.            Read commands from INFILE; send corresponding responses
  312.            (e.g. anything written to filename `-') to OUTFILE, stdout
  313.            by default.
  314.  
  315.       `(copy [ID] [name])'
  316.            Copies an object    or camera.  If ID is not specified, it
  317.            is assumed to be    targetgeom.  If    name is    not specified, it
  318.            is assumed to be    the same as the    name of    ID.
  319.  
  320.       `(cursor-still [INT])'
  321.            Sets the    number of microseconds for which the cursor must not
  322.            move to register    as holding still.  If INT is not specified,
  323.            the value will be reset to the default.
  324.  
  325.  
  326.  
  327.      Page 5                        (printed 12/22/98)
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  335.  
  336.  
  337.  
  338.       `(cursor-twitch     [INT])'
  339.            Sets the    distance which the cursor must not move    (in x or
  340.            y) to register as holding still.     If INT    is not specified,
  341.            the value will be reset to the default.
  342.  
  343.       `(delete       ID)'
  344.            Delete object or    camera ID.
  345.  
  346.       `(dice       GEOM-ID N)'
  347.            Dice any    Bezier patches within GEOM-ID into NxN meshes; default 10.
  348.            See also    the appearance attribute `dice', which makes this command
  349.            obsolete.
  350.  
  351.       `(dimension [N])'
  352.            Sets or reads the space dimension for N-dimensional viewing.
  353.            (Since calculations are done using homogeneous coordinates,
  354.            this means matrices are (N+1)x(N+1).)
  355.            With no arguments, returns the current dimension, or 0 if
  356.            N-dimensional viewing has not been enabled.
  357.  
  358.       `(dither  CAM-ID {on|off|toggle})'
  359.             Turn dithering on or off in that camera.
  360.  
  361.       `(draw       CAM-ID)'
  362.            Draw the    view in    CAM-ID,    if it needs redrawing.    See also `redraw'.
  363.  
  364.       `(echo      ...)'
  365.            Write the given data to the special file    `-'.  Strings are written
  366.            literally; lisp expressions are evaluated and their values written.
  367.            If received from    an external program, `echo' sends to the program's
  368.            input.  Otherwise writes    to geomview's own standard output
  369.            (typically the terminal).
  370.  
  371.       `(emodule-clear)'
  372.            Clears the geomview application (external module) browser.
  373.  
  374.       `(emodule-define  NAME  SHELL-COMMAND    ...)'
  375.                Define an external module called    NAME, which then appears in the
  376.                external-module browser.     The SHELL-COMMAND string
  377.                is a UNIX shell command which invokes the module.
  378.                See emodule-run for discussion of external modules.
  379.  
  380.       `(emodule-defined `modulename')'
  381.            If the given external-module name is known, returns the name of
  382.            the program invoked when    it's run as a quoted string; otherwise
  383.            returns nil.  `(echo (emodule-defined `name'))' prints the string.
  384.  
  385.       `(emodule-isrunning NAME)'
  386.            Returns Lt if the emodule NAME is running, or Lnil
  387.            if it is    not running.  NAME is searched for in the
  388.            names as    they appear in the browser and in the shell commands
  389.            used to execute the external modules (not including arguments).
  390.  
  391.  
  392.  
  393.      Page 6                        (printed 12/22/98)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  401.  
  402.  
  403.  
  404.       `(emodule-path)'
  405.            Returns the current search path for external modules.
  406.            Note: to    actually see the value returned    by this    function
  407.            you should wrap it in a call to echo: (echo (emodule-path)).
  408.                See also    set-emodule-path.
  409.  
  410.       `(emodule-run     SHELL-COMMAND ARGS...)'
  411.            Runs the    given SHELL-COMMAND (a string containing a UNIX    shell
  412.            command)    as an external module.    The module's standard output
  413.            is taken    as geomview commands; responses    (written to filename
  414.            `-') are    sent to    the module's standard input.  The shell
  415.            command is interpreted by /bin/sh, so e.g. I/O redirection may
  416.            be used;    a program which    prompts    the user for input from    the
  417.            terminal    could be run with:
  418.          (emodule-run  yourprogram  <&2)
  419.            If not already set, the environment variable $MACHTYPE is set
  420.            to the name of the machine type.     Input and output
  421.            connections to geomview are dropped when    the shell command
  422.            terminates.  Clicking on    a running program's module-browser entry
  423.            sends the signal    SIGHUP to the program.    For this to work, programs
  424.            should avoid running in the background; those using FORMS or GL
  425.            should call foreground()    before the first FORMS or winopen() call.
  426.            See also    emodule-define,    emodule-start.
  427.  
  428.       `(emodule-sort)'
  429.                Sorts the modules in the    application browser alphabetically.
  430.  
  431.       `(emodule-start  NAME)'
  432.                Starts the external module NAME,    defined    by emodule-define.
  433.                Equivalent to clicking on the corresponding module-browser entry.
  434.  
  435.       `(emodule-transmit NAME LIST)'
  436.            Places LIST into    external module    NAME's standard    input.    NAME is
  437.            searched    for in the names of the    modules    as they    appear in the
  438.            External    Modules    browser    and then in the    shell commands used to
  439.            execute the external modules.  Does nothing if modname is not
  440.            running.
  441.  
  442.       `(escale        GEOM-ID FACTOR)'
  443.            Same as scale but multiplies by exp(scale).  Obsolete.
  444.  
  445.       `(event-keys {on|off})'
  446.             Turn keyboard events on    or off to enable/disable keyboard shortcuts.
  447.  
  448.       `(event-mode       MODESTRING)'
  449.            Set the mouse event (motion) mode; MODESTRING should be one of
  450.            the strings that    appears    in the motion mode browser (including
  451.            the keyboard shortcut, e.g. `[r]    Rotate').
  452.  
  453.       `(event-pick {on|off})'
  454.            Turn picking on or off.
  455.  
  456.  
  457.  
  458.  
  459.      Page 7                        (printed 12/22/98)
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  467.  
  468.  
  469.  
  470.       `(evert       GEOM-ID [yes|no])'
  471.            Set the normal eversion state of    GEOM-ID.  If the second    argument
  472.            is omitted, toggle the eversion state.
  473.  
  474.       `(exit)'
  475.            Terminates geomview.
  476.  
  477.       `(ezoom       GEOM-ID FACTOR)'
  478.            Same as zoom but    multiplies by exp(zoom).  Obsolete.
  479.  
  480.       `(freeze       CAM-ID)'
  481.            Freeze CAM-ID; drawing in this camera's window is turned    off
  482.            until it    is explicitly redrawn with `(redraw CAM-ID)', after
  483.            which time drawing resumes as normal.
  484.  
  485.       `(geometry       GEOM-ID [GEOMETRY])'
  486.            Specify the geometry for    GEOM-ID.  GEOMETRY is a    string
  487.            giving an OOGL geometry specification.  If no object
  488.            called GEOM-ID exists, it is created; in    this case the
  489.            GEOMETRY    argument is optional, and if omitted, the new
  490.            object GEOM-ID is given an empty    geometry.
  491.  
  492.       `(geomview-version)'
  493.            Returns a string    representing the version of geomview that is
  494.            running.
  495.  
  496.       `(hdefine  `geometry'|`camera'|`transform'|`window'  name  value)'
  497.            Sets the    value of a handle of a given type.
  498.               (hdefine    <type>    <name>    <value>)
  499.            is generally equivalent to
  500.               (read <type>  { define <name> <value> })
  501.            except that the assignment is done when hdefine is executed,
  502.            (possibly not at    all if inside a    conditional statement),
  503.            while the `read ... define' performs assignment as soon as the
  504.            text is read.
  505.  
  506.  
  507.       `(help     [command])'
  508.            Command may include `*'s    as wildcards; see also `??'
  509.            One-line    command    help; lists names only if multiple commands match.
  510.  
  511.       `(hmodel CAMID {virtual|projective|conformal})'
  512.            Set the model used to display geometry in
  513.            this camera; see    also `space'.
  514.  
  515.       `(hsphere-draw   CAMID [yes|no])'
  516.            Say whether to draw a unit sphere: the sphere at    infinity in
  517.            hyperbolic space, and a reference sphere    in Euclidean and spherical
  518.            spaces.    If the second argument is omitted, `yes' is assumed.
  519.  
  520.       `(if TEST EXPR1 [EXPR2])'
  521.            Evaluates TEST; if TEST returns a non-nil value,    returns    the
  522.  
  523.  
  524.  
  525.      Page 8                        (printed 12/22/98)
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  533.  
  534.  
  535.  
  536.            value of    EXPR1.    If TEST    returns    nil, returns the value of
  537.            EXPR2 if    EXPR2 is present, otherwise returns nil.
  538.  
  539.       `(inhibit-warning STRING)'
  540.            Inhibit warning inhbits geomview    from displaying    a
  541.            particular warning message determined by    STRING.
  542.            At present there    are no warning messages    that this
  543.            applies to, so this command is rather useless.
  544.  
  545.       `(input-translator  "#prefix_string"    "Bourne-shell-command")'
  546.            Defines an external translation program for special input types.
  547.            When asked to read a file which begins with the specified string,
  548.            geomview    invokes    that program with standard input coming    from the given file.
  549.            The program is expected to emit OOGL geometric data to its standard output.
  550.            In this implementation, only prefixes beginning with # are recognized.
  551.            Useful as in
  552.               (input-translator    "#VRML"    "vrml2oogl")
  553.  
  554.       `(interest (COMMAND [args]))'
  555.  
  556.            Allows you to express interest in a command.  When geomview
  557.            executes    that command in    the future it will echo    it to the
  558.            communication pool from which the interest command came.
  559.            COMMAND can be any command.  Args specify restrictions on the
  560.            values of the arguments;    if args    are present in the interest
  561.            command,    geomview will only echo    calls to the command in    which
  562.            the arguments match those given in the interest command.     Two
  563.            special argument    values may appear in the argument list.     `*'
  564.            matches any value. `nil'    matches    any value but supresses    the
  565.            reporting of that value;    its value is reported as `nil'.
  566.  
  567.            The purpose of the interest command is to allow external
  568.            modules to find out about things    happening inside geomview.
  569.            For example, a module interested    in knowing when    a geom called
  570.            `foo' is    deleted    could say `(interest (delete foo))' and    would
  571.            receive the string `(delete foo)' when foo is deleted.
  572.  
  573.            Picking is a special case of this.  For most modules
  574.            interested in pick events the command `(interest    (pick
  575.            world))'    is sufficient.    This causes geomview to    send a string
  576.            of the form `(pick world    ...)' every time a pick    event (right
  577.            mouse double click).  See the `pick' command for    details.
  578.  
  579.       `(lines-closer   CAM-ID DIST)'
  580.            Draw lines (including edges) closer to the camera than polygons
  581.            by DIST / 10^5  of the Z-buffer range.  DIST = 3.0 by default.
  582.            If DIST is too small, a line lying on a surface may be
  583.            dotted or invisible, depending on the viewpoint.
  584.            If DIST is too large, lines may appear in front of surfaces
  585.            that they actually lie behind.  Good values for DIST vary with
  586.            the scene, viewpoint, and distance between near and far clipping
  587.            planes.    This feature is    a kludge, but can be helpful.
  588.  
  589.  
  590.  
  591.      Page 9                        (printed 12/22/98)
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  599.  
  600.  
  601.  
  602.       `(load  filename  [command|geometry|camera])'
  603.            Loads the given file into geomview.  The    optional second    argument
  604.            specifies the type of data it contains, which may be `command'
  605.            (geomview commands), `geometry' (OOGL geometric data), or
  606.            `camera'    (OOGL camera definition).  If omitted, attempts    to guess
  607.            about the file's    contents.
  608.            Loading geometric data creates a    new visible object; loading a camera
  609.            opens a new window; loading a command file executes those commands.
  610.  
  611.  
  612.       `(load-path)'
  613.            Returns the current search path for command, geometry, etc. files.
  614.            Note: to    actually see the value returned    by this    function
  615.            you should wrap it in a call to echo: (echo (load-path)).
  616.            See also    set-load-path.
  617.  
  618.       `(look [objectID] [cameraID])'
  619.            Rotates the named camera    to point toward    the center of the
  620.            bounding    box of the named object    (or the    origin in hyperbolic or
  621.            spherical space).  In Euclidean space, moves the    camera
  622.            forward or backward until the object appears as large
  623.            as possible while still being entirely visible.    Equivalent to
  624.            progn (
  625.             (look-toward [objectID] [cameraID] {center | origin})
  626.             [(look-encompass [objectID]    [cameraID])]
  627.            )
  628.            If objectID is not specified, it    is assumed to be World.     If
  629.            cameraID    is not specified, it is    assumed    to be targetcam.
  630.  
  631.       `(look-encompass [objectID] [cameraID])'
  632.            Moves cameraID backwards    or forwards until its field of view
  633.            surrounds objectID. This    routine    works only in Euclidean    space.
  634.            If objectID is not specified, it    is assumed to be the world.
  635.            If cameraID is not specified, it    is assumed to be the targetcam.
  636.            See also    (look-encompass-size).
  637.  
  638.       `(look-encompass-size    [view-fraction    clip-ratio  near-margin    far-margin])'
  639.            Sets/returns parameters used by (look-encompass).
  640.            view-fraction is    the portion of the camera window filled    by the object,
  641.            clip-ratio is the max allowed ratio of near-to-far clipping planes.
  642.            The near    clipping plane is 1/near-margin    times closer than the near
  643.            edge of the object, and the far clipping    plane is far-margin times
  644.            further away.  Returns the list of current values.
  645.            Defaults: .75  100  0.1    4.0
  646.  
  647.  
  648.       `(look-recenter [objectID] [cameraID])'
  649.            Translates and rotates the camera so that it is looking in the
  650.            -z direction (in    objectID's coordinate system) at the center of
  651.            objectID's bounding box (or the origin of the coordinate    system
  652.            in non-Eudlidean    space).     In Euclidean space, the camera    is also
  653.            moved as    close as possible to the object    while allowing the
  654.  
  655.  
  656.  
  657.      Page 10                        (printed 12/22/98)
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  665.  
  666.  
  667.  
  668.            entire object to    be visible.  Also makes    sure that the y-axes of
  669.            objectID    and cameraID are parallel.
  670.  
  671.       `(look-toward    [objectID] [cameraID] [origin |    center])'
  672.            Rotates the named camera    to point toward    the origin of the
  673.            object's    coordinate system, or the center of the    object's
  674.            bounding    box (in    non-Euclidean space, the origin    will be    used
  675.            automatically).    Default    objectID is the    world, default camera
  676.            is targetcam, default location to point towards is the center
  677.            of the bounding box.
  678.  
  679.       `(merge       {window|camera} CAM-ID  { WINDOW or CAMERA ... } )'
  680.            Modify the given    window or camera, changing just    those properties
  681.            specified in the    last argument.    E.g.
  682.             (merge camera `Camera' { far 20 })
  683.            sets Camera's far clipping plane    to 20 while leaving
  684.            other attributes    untouched.
  685.  
  686.       `(merge-ap       GEOM-ID APPEARANCE)'
  687.            Merge in    some appearance    characteristics    to GEOM-ID.
  688.            Appearance parameters include surface and line color, shading
  689.            style, line width, and lighting.
  690.  
  691.       `merge-base-ap is a synonym for merge-baseap.'
  692.  
  693.       `(merge-baseap   APPEARANCE)'
  694.            Merge in    some appearance    characteristics    to the base default
  695.            appearance (applied to every geom before    its own    apperance).
  696.            Lighting    is typically included in the base appearance.
  697.  
  698.       `(morehelp    command)'
  699.            `command' may include `*' wildcards.
  700.            Prints more info    than `(help command)'.
  701.  
  702.       `(name-object       ID NAME)'
  703.            Assign a    new NAME (a string) to ID.  A number is    appended if
  704.            that name is in use (for    example, `foo' -> `foo<2>').  The new
  705.            name, possibly with number appended, may    be used    as object's
  706.            id thereafter.
  707.  
  708.       `(ND-axes CAMID [CLUSTERNAME [Xindex Yindex Zindex]])'
  709.            In our model for    N-D viewing (enabled by    (dimension)), objects in
  710.            N-space are viewed by N-dimensional *camera clusters*.
  711.            Each real camera    window belongs to some cluster,    and shows &
  712.            manipulates a 3-D axis-aligned projected    subspace of the    N-space    seen
  713.            by its cluster.    Moving one camera in a cluster affects its siblings.
  714.  
  715.            The ND-axes command configures all this.     It specifies a    camera's
  716.            cluster membership, and the set of N-space axes which become the
  717.            3-D camera's X, Y, and Z    axes.  Axes are    specified by their indices,
  718.            from 0 to N-1 for an N-dimensional space.  Cluster CLUSTERNAME is
  719.            implicitly created if not previously known.
  720.  
  721.  
  722.  
  723.      Page 11                        (printed 12/22/98)
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  731.  
  732.  
  733.  
  734.            To read a camera's configuration, use `(echo (ND-axes CAMID))'.
  735.  
  736.  
  737.       `(ND-color CAMID'
  738.             [ (( [ID] (x0 x1 x2    ... xn)    v r g b    a   v r    g b a  ... )
  739.                ((x0 ...    xn)  v r g b a    v r g b    a ...) ...)] )
  740.            Specifies a function, applied to    each N-D vertex, which determines the
  741.            colors of N-dimensional objects as shown    in camera CAMID.
  742.            Each coloring function is defined by a vector (in ID's coordinate system)
  743.            [x0 x1 ... xn] and by a sequence    of value (v)/color(r g b a) tuples,
  744.            ordered by increasing v.     The inner product v = P.[x] is    linearly
  745.            interpolated in this table to give a color.
  746.            If ID is    omitted, the (xi) vector is assumed in universe    coordinates.
  747.            The ND-color command specifies a    list of    such functions;    each vertex
  748.            is colored by their sum (so e.g.    green intensity    could indicate
  749.            projection along    one axis while red indicated another.
  750.            An empty    list, as in (ND-color CAMID ()), suppresses coloring.
  751.            With no second argument,    (ND-color CAMID) returns that camera's
  752.            color-function list.
  753.            Even when coloring is enabled, objects tagged with the `keepcolor'
  754.            appearance attribute are    shown in their natural colors.
  755.  
  756.  
  757.       `(ND-xform OBJID [ntransform { idim odim  ...    }])'
  758.            Sets or returns the N-D transform of the    given object.
  759.            In dimension N, this is an (N+1)x(N+1) matrix.
  760.            Note that all cameras in    a camera-cluster have the same N-D transform.
  761.  
  762.  
  763.       `(ND-xform-get ID [from-ID])'
  764.            Returns the N-D transform of the    given object in    the coordinate system
  765.            of from-ID (default `universe'),    in the sense
  766.          <point-in-ID-coords> *    Transform = <point-in-from-ID-coords>
  767.  
  768.  
  769.       `(new-alien       name    [GEOMETRY])'
  770.            Create a    new alien (geom    not in the world) with the given name
  771.            (a string).  GEOMETRY is    a string giving    an OOGL    geometry
  772.            specification.  If GEOMETRY is omitted, the new alien
  773.            is given    an empty geometry.  If an object with that name
  774.            already exists, the new alien is    given a    unique name.  The
  775.            light beams that    are used to move around    the lights are an
  776.            example of aliens. They're drawn    but are    not controllable the
  777.            way ordinary objects are: they don't appear in the object
  778.            browser and the user can't move them with the normal motion
  779.            modes.
  780.  
  781.       `(new-camera       name    [CAMERA])'
  782.            Create a    new camera with    the given name (a string).  If a
  783.            camera with that    name already exists, the new object is given
  784.            a unique    name.  If CAMERA is omitted a default camera is    used.
  785.  
  786.  
  787.  
  788.  
  789.      Page 12                        (printed 12/22/98)
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  797.  
  798.  
  799.  
  800.       `(new-center [id])'
  801.            Stop id,    then set id's transform    to the identity.  Default id
  802.            is target.  Also, if the    id is a    camera,    calls
  803.            (look-recenter World id).  The main function of the call    to
  804.            (look-recenter) is to place the camera so that it is pointing
  805.            parallel    to the z axis toward the center    of the world.
  806.  
  807.       `(new-geometry   name    [GEOMETRY])'
  808.            Create a    new geom with the given    name (a    string).  GEOMETRY is
  809.            a string    giving an OOGL geometry    specification.    If
  810.            GEOMETRY    is omitted, the    new object is given an empty geometry.
  811.            If an object with that name already exists, the new object is
  812.            given a unique name.
  813.  
  814.       `(new-reset)'
  815.            Equivalent to (progn (new-center    ALLGEOMS)(new-center ALLCAMS))
  816.  
  817.       `(NeXT)'
  818.            Returns t if running on a NeXT, nil if not
  819.  
  820.       `(normalization  GEOM-ID {each|none|all|keep})'
  821.            Set the normalization status of GEOM-ID.
  822.            `none'
  823.             suppresses all normalization.
  824.            `each'
  825.             normalizes the object's bounding box to fit    into the unit
  826.             sphere, with the center of its bounding box    translated
  827.             to the origin.  The    box is scaled such that    its long diagonal,
  828.             sqrt((xmax-xmin)^2 + (ymax-ymin)^2 + (zmax-zmin)^2), is 2.
  829.            `all'
  830.             resembles `each', except when an object is changing
  831.             (e.g. when its geometry is being changed by    an external program).
  832.             Then, `each' tightly fits the bounding box around the
  833.             object whenever it changes and normalizes accordingly,
  834.             while `all'    normalizes the union of    all variants of    the object
  835.             and    normalizes accordingly.
  836.            `keep'
  837.             leaves the current normalization transform unchanged
  838.             when the object changes.  It may be    useful to apply    `each' or
  839.             `all' normalization    apply to the first version of a    changing
  840.             object to bring it in view,    then switch to `keep'.
  841.  
  842.       `(pick COORDSYS GEOMID G V E F P VI EI FI)'
  843.            The pick    command    is executed internally in response to pick
  844.            events (right mouse double click).
  845.  
  846.            COORDSYS    = coordinate system in which coordinates of the    following
  847.            arguments are specified.   This can be:
  848.             world: world coord sys
  849.             self:  coord sys of    the picked geom    (GEOMID)
  850.             primitive: coord sys of the    actual primitive within
  851.             the picked geom    where the pick occurred.
  852.  
  853.  
  854.  
  855.      Page 13                        (printed 12/22/98)
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  863.  
  864.  
  865.  
  866.            GEOMID =    id of picked geom
  867.            G = picked point    (actual    intersection of    pick ray with object)
  868.            V = picked vertex, if any
  869.            E = picked edge,    if any
  870.            F = picked face
  871.            P = path    to picked primitive [0 or more]
  872.            VI = index of picked vertex in primitive
  873.            EI = list of indices of endpoints of picked edge, if any
  874.            FI = index of picked face
  875.  
  876.            External    modules    can find out about pick    events by registering
  877.            interest    in calls to `pick' via the `interest' command.
  878.  
  879.       `(pick-invisible [yes|no])'
  880.            Selects whether picks should be sensitive to objects whose appearance
  881.            makes them invisible; default yes.
  882.            With no arguments, returns current status.
  883.  
  884.       `(pickable       GEOM-ID {yes|no})'
  885.            Say whether or not GEOM-ID is included in the pool of objects
  886.            that could be returned from the pick command.
  887.  
  888.       `(position       objectID otherID)'
  889.            Set the transform of objectID to    that of    otherID.
  890.  
  891.       `(position-at       objectID otherID [center | origin])'
  892.            Translate objectID to the center    of the bounding    box or the
  893.            origin of the coordinate    system of otherID (parallel translation).
  894.            Default is center.
  895.  
  896.       `(position-toward objectID otherID [center | origin])'
  897.            Rotate objectID so that the center of the bounding box
  898.            or the origin of    the coordinate system of the otherID
  899.            lies on the positive z-axis of the first    object.     Default is
  900.            the center of the bounding box.
  901.  
  902.       `(progn STATEMENT [ ... ])'
  903.            evaluates each STATEMENT    in order and returns the value of the
  904.            last one.  Use progn to group a collection of commands together,
  905.            forcing them to be treated as a single command.
  906.  
  907.       `quit    is a synonym for `exit''
  908.  
  909.       `(quote EXPR)'
  910.            returns the symbolic lisp expression EXPR without evaluating it.
  911.  
  912.       `(rawevent       dev val x y t)'
  913.            Enter the specified raw event into the event queue.  The
  914.            arguments directly specify the members of the event structure
  915.            used internally by geomview.  This is the lowest    level event
  916.            handler and is not intended for general use.
  917.  
  918.  
  919.  
  920.  
  921.      Page 14                        (printed 12/22/98)
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  929.  
  930.  
  931.  
  932.       `(rawpick CAMID X Y)'
  933.            Process a pick event in camera CAMID at location    (X,Y) given in
  934.            integer pixel coordinates.  This    is a low-level procedure not
  935.            intended    for external use.
  936.  
  937.       `(read {geometry|camera|transform|command} {GEOMETRY or CAMERA or ...})'
  938.            Read and    interpret the text in ... as containing    the
  939.            given type of data.  Useful for defining    objects    using OOGL
  940.            reference syntax, e.g.
  941.  
  942.          (geometry  thing { INST  transform : T       geom    : fred })
  943.          (read    geometry  { define fred    QUAD 1 0 0  0 1    0  0 0 1  1 0 0    })
  944.          (read    transform { define T <myfile})
  945.  
  946.       `(real-id ID)'
  947.            Returns a string    canonically identifying    the given ID,
  948.            or `nil'    if the object does not exist.  Examples:
  949.         (if (real-id fred) (delete fred))
  950.            deletes `fred' if it exists but reports no error    if it doesn't, and
  951.         (if (= (real-id    targetgeom) (real-id World)) ()    (delete    targetgeom))
  952.            deletes `targetgeom' if it is different from the    World.
  953.  
  954.  
  955.       `(redraw       CAM-ID)'
  956.            States that the view in CAM-ID should be    redrawn    on the
  957.            next pass through the main loop or the next invocation of `draw'.
  958.  
  959.       `(regtable) --- shows    the registry table'
  960.  
  961.       `(rehash-emodule-path)'
  962.            Rebuilds    the application    (external module) browser by reading
  963.            all .geomview-* files in    all directories    on the emodule-path.
  964.            Primarily intended for internal use; any    applications defined
  965.            by (emodule-define ...) commands    outside    of the .geomview-*
  966.            files on    the emodule-path will be lost.    Does not sort the
  967.            entries in the brower; see (emodule-sort) for that.
  968.  
  969.       `(replace-geometry GEOM-ID PART-SPECIFICATION    GEOMETRY)'
  970.            Replace a part of the geometry for GEOM-ID.
  971.  
  972.       `(rib-display       [frame|tiff]    FILEPREFIX)'
  973.            Set Renderman display to    framebuffer (popup screen window) or a
  974.            TIFF format disk    file. FILEPREFIX is used to construct
  975.            names of    the form `prefixNNNN.suffix'. (i.e. foo0000.rib)
  976.            The number is incremented on every call to `rib-snapshot' and
  977.            reset to    0000 when `rib-display'    is called. TIFF    files are given
  978.            the same    prefix and number as the RIB file (i.e.    foo0004.rib
  979.            generates foo0004.tiff).    The default FILEPREFIX is `geom' and
  980.            the default format is TIFF. (Note that geomview just generates a
  981.            RIB file, which must then be rendered.)
  982.  
  983.       `(rib-snapshot   CAM-ID  [filename])'
  984.  
  985.  
  986.  
  987.      Page 15                        (printed 12/22/98)
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  995.  
  996.  
  997.  
  998.            Write Renderman snapshot    (in RIB    format)    of CAM-ID to <filename>.
  999.            If no filename specified, see `rib-display' for explanation of
  1000.            the filename used.
  1001.  
  1002.       `(scale       GEOM-ID FACTOR [FACTORY FACTORZ])'
  1003.            Scale GEOM-ID, multiplying its size by FACTOR.  The factors
  1004.            should be positive numbers.  If FACTORY and FACTORZ are
  1005.            present and non-zero, the object    is scaled by FACTOR in x, by
  1006.            FACTORY in y, and by FACTORZ in z.  If only FACTOR is present,
  1007.            the object is scaled by FACTOR in x, y, and z.  Scaling only
  1008.            really makes sense in Euclidean space.  Mouse-driven scaling in
  1009.            other spaces is not allowed;  the scale command may be issued
  1010.            in other    spaces but should be used with caution because it may
  1011.            cause the data to extend    beyond the limits of the space.
  1012.  
  1013.       `(scene       CAM-ID [GEOMETRY])'
  1014.            Make CAM-ID look    at GEOMETRY instead of at the universe.
  1015.  
  1016.       `(set-clock TIME)'
  1017.            Adjusts the clock for this command stream to read TIME (in seconds)
  1018.            as of the moment    the command is received.  See also sleep-until,    clock.
  1019.  
  1020.       `(set-conformal-refine CMX [N    [SHOWEDGES]])'
  1021.            Sets the    parameters for the refinement algorithm    used in    drawing
  1022.            in the conformal    model.    CMX is the cosine of the maximum angle
  1023.            an edge can bend    before it is refined.  Its value should    be between
  1024.            -1 and 1; the default is    0.95; decreasing its value will    cause less
  1025.            refinement.  N is the maximum number of iterations of refining;
  1026.            the default is 6.  SHOWEDGES, which should be `no' or `yes',
  1027.            determines whether interior edges in the    refinement are drawn.
  1028.  
  1029.       `(set-emodule-path      (PATH1 ... PATHN))'
  1030.            Sets the    search path for    external modules.  The PATHi should
  1031.            be pathnames of directories containing, for each    module,    the
  1032.            module's    executable file    and a .geomview-<modulename> file
  1033.            which contains an (emodule-define ...) command for that
  1034.            module.    This command implicitly    calls (rehash-emodule-path)
  1035.            to rebuild the application brower from the new path setting.
  1036.            The special directory name `+' is replaced by the existing path,
  1037.            so e.g. (set-emodule-path (mydir    +)) prepends mydir to the path.
  1038.  
  1039.       `(set-load-path      (PATH1 ... PATHN))'
  1040.            Sets search path    for command, geometry, etc. files.  The    PATHi
  1041.            are strings giving the pathnames    of directories to be searched.
  1042.            The special directory name `+' is replaced by the existing path,
  1043.            so e.g. (set-load-path (mydir +)) prepends mydir    to the path.
  1044.  
  1045.       `(set-motionscale X)'
  1046.            Set the motion scale factor to X    (default value 0.5).  These
  1047.            commands    scale their motion by an amount    which depends on the
  1048.            distance    from the frame to the center and on the    size of    the
  1049.            frame.  Specifically, they scale    by
  1050.  
  1051.  
  1052.  
  1053.      Page 16                        (printed 12/22/98)
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  1061.  
  1062.  
  1063.  
  1064.                dist + scaleof(frame) * motionscale
  1065.            where dist is the distance from the center to the frame and
  1066.            motionscale is the motion scale factor set by this function.
  1067.            Scaleof(frame) measures the size    of the frame object.
  1068.  
  1069.       `(setenv  name string)  sets the environment variable    `name' to the value'
  1070.  
  1071.            STRING;
  1072.            the name    is visible to geomview (as in pathnames    containing `$name')
  1073.            and to processes    it creates, e.g. external modules.
  1074.  
  1075.       `(sgi)'
  1076.            Returns t if running on an sgi machine, nil if not
  1077.  
  1078.       `(shell      SHELL-COMMAND)'
  1079.            Execute the given UNIX SHELL-COMMAND using /bin/sh.  Geomview
  1080.            waits for it to complete    and will be unresponsive until it does.
  1081.            A synonym is `!'.
  1082.  
  1083.       `(sleep-for  TIME)'
  1084.            Suspend reading commands    from this stream for TIME seconds.
  1085.            Commands    already    read will still    be executed; `sleep-for' inside
  1086.            `progn' won't delay execution of    the rest of the    progn's    contents.
  1087.  
  1088.       `(sleep-until    TIME)'
  1089.            Suspend reading commands    from this stream until TIME (in    seconds).
  1090.            Commands    already    read will still    be executed; `sleep-until' inside
  1091.            `progn' won't delay execution of    the rest of the    progn's    contents.
  1092.            Time is measured    according to this stream's clock, as set by
  1093.            `set-clock'; if never set, the first sleep-until    sets it    to 0
  1094.            (so initially (sleep-until TIME)    is the same as (sleep-for TIME)).
  1095.            Returns the number of seconds until TIME.
  1096.  
  1097.       `(snapshot       CAM-ID     FILENAME [FORMAT [XSIZE [YSIZE]]])'
  1098.            Save a snapshot of CAM-ID in the    FILENAME (a string).  The
  1099.            FORMAT argument is optional; it may be `ppmscreen',
  1100.            `sgi', `ps', or `ppm'.  A `ppmscreen' snapshot is created by reading
  1101.            the image directly from the given window; the window is popped above
  1102.            other windows and redrawn first,    then its contents are written as a
  1103.            PPM format image.  With `ps', dumps a Postscript    picture    representing
  1104.            the view    from that window; hidden-surface removal might be incorrect.
  1105.            With `ppm', dumps a PPM-format image produced by    geomview's internal
  1106.            software    renderer; this may be of arbitrary size.  If the FILENAME
  1107.            argument    begins with the    vertical bar `|', it's interpreted as a
  1108.            /bin/sh command to which    the PPM    or PS data should be piped.
  1109.            Optional    XSIZE and YSIZE    values are relevant only for `ppm' format,
  1110.            and render to a window of that size (or scaled to that size,
  1111.            with aspect fixed, if only XSIZE    is given)
  1112.  
  1113.       `(soft-shader     CAM-ID     {on|off|toggle})'
  1114.            Select whether to use software or hardware shading in that camera.
  1115.  
  1116.  
  1117.  
  1118.  
  1119.      Page 17                        (printed 12/22/98)
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  1127.  
  1128.  
  1129.  
  1130.       `(space {euclidean|hyperbolic|spherical})'
  1131.            Set the space associated    with the world.
  1132.  
  1133.       `(stereowin CAM-ID  [no|horizontal|vertical|colored] [gapsize])'
  1134.            Configure CAM-ID    as a stereo window.
  1135.            no: entire window is a single pane, stereo disabled
  1136.            horizontal: split left/right: left is stereo eye#0, right is #1.
  1137.            vertical: split top/bottom: bottom is eye#0, top    is #1.
  1138.            colored:    panes overlap, red is stereo eye#0, cyan is #1.
  1139.  
  1140.            A gap of    `gapsize' pixels is left between subwindows;
  1141.            if omitted, subwindows are adjacent.
  1142.            If both layout and gapsize are omitted, e.g. (stereowin CAM-ID),
  1143.            returns current settings    as a `(stereowin ...)' command list.
  1144.            This command doesn't set    stereo projection; use `merge camera' or
  1145.            `camera'    to set the stereyes transforms,    and `merge window' or
  1146.            `window'    to set the pixel aspect    ratio &    window position    if needed.
  1147.  
  1148.       `(time-interests deltatime initial prefix [suffix])'
  1149.            Indicates that all interest-related messages, when separated by at
  1150.            least `deltatime' seconds of real time, should be preceded by
  1151.            the string `prefix' and followed    by `suffix'; the first message
  1152.            is preceded by `initial'.  All three are    printf format strings,
  1153.            whose argument is the current clock time    (in seconds) on    that stream.
  1154.            A `deltatime' of    zero timestamps    every message.    Typical    usage:
  1155.            (time-interests .1 `(set-clock %g)' `(sleep-until %g)')    or
  1156.            (time-interests .1 `(set-clock %g)'
  1157.             "(sleep-until %g) (progn (set-clock    %g)" ")")    or
  1158.            (time-interests .1 "(set-clock %g)"
  1159.                 "(if (> 0 (sleep-until %g))    (" "))".
  1160.  
  1161.       `(transform       objectID centerID frameID [rotate|translate|translate-scaled|scale] x y z [dt] [`smooth'])'
  1162.            Apply a motion (rotation, translation, scaling) to object `objectID';
  1163.            that is,    construct and concatenate a transformation matrix with
  1164.            objectID's transform  The 3 IDs involved    are the    object
  1165.            that moves, the center of motion, and the frame of reference
  1166.            in which    to apply the motion.  The center is easiest understood
  1167.            for rotations: if centerID is the same as objectID then it will
  1168.            spin around its own axes; otherwise the moving object will orbit
  1169.            the center object.  Normally frameID, in    whose coordinate system
  1170.            the (mouse) motions are interpreted, is `focus',    the current camera.
  1171.            Translations can    be scaled proportional to the
  1172.            distance    between    the target and the center. Support for
  1173.            spherical and hyperbolic    as well    as Euclidean space is
  1174.            built-in: use the `space' command to change spaces.  With type
  1175.            `rotate'    x, y, and z are    floats specifying angles in RADIANS.
  1176.            For types `translate' and `translate-scaled' x, y, and z    are
  1177.            floats specifying distances in the coordinate system of the
  1178.            center object.  The optional `dt' field allows a    simple form of
  1179.            animation; if present, the object moves by just that amount during
  1180.            approximately `dt' seconds, then    stops.    If present and followed    by
  1181.            the `smooth' keyword, the motion    is animated with a 3t^2-2t^3
  1182.  
  1183.  
  1184.  
  1185.      Page 18                        (printed 12/22/98)
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  1193.  
  1194.  
  1195.  
  1196.            function, so as to start    and stop smoothly.  If absent, the motion is
  1197.            applied immediately.
  1198.  
  1199.       `(transform-incr  objectID centerID frameID [rotate|translate|translate-scaled|scale]    x y z [dt])'
  1200.            Apply continuing    motion:    construct a transformation matrix and
  1201.            concatenate it with the current transform of objectID every
  1202.            refresh (sets objectID's    incremental transform).    Same syntax
  1203.            as transform.  If optional `dt' argument    is present,
  1204.            the object is moved at each time    step such that its average motion
  1205.            equals one instance of the motion per `dt' seconds.  E.g.
  1206.          (transform-incr  World    World World  rotate  6.28318 0 0  10.0)
  1207.            rotates the World about its X axis at 1 turn (2pi radians) per 10 seconds.
  1208.  
  1209.  
  1210.       `(transform-set objectID centerID frameID [rotate|translate|translate-scaled|scale] x    y z)'
  1211.            Set objectID's transform    to the constructed transform.
  1212.            Same syntax as transform.
  1213.  
  1214.       `(ui-center       ID)'
  1215.                Set the center for user interface (i.e. mouse) controlled
  1216.                motions to object ID.
  1217.  
  1218.       `ui-emotion-program is an obsolete command.'
  1219.            Use its new eqivalent `emodule-define' instead.
  1220.  
  1221.       `ui-emotion-run is an    obsolete command.'
  1222.            Use its new eqivalent `emodule_start' instead.
  1223.  
  1224.       `(ui-freeze [on|off])'
  1225.                Toggle updating user interface panels. Off by default.
  1226.  
  1227.       `(ui-panel       PANELNAME  {on|off} [ WINDOW    ] )'
  1228.                Do or don't display the given user-interface panel.
  1229.                Case is ignored in panel    names.    Current    PANELNAMEs are:
  1230.                    geomview           main panel
  1231.                    tools           motion controls
  1232.                    appearance      appearance controls
  1233.                    cameras           camera controls
  1234.                    lighting           lighting    controls
  1235.                    obscure           obscure controls
  1236.                    materials       material    properties controls
  1237.                    command           command entry box
  1238.                    credits           geomview    credits
  1239.                By default, the `geomview' and `tools' panels appear when
  1240.                geomview    starts.     If the    optional Window    is supplied, a
  1241.                `position' clause (e.g. (ui-panel obscure on { position xmin
  1242.                xmax ymin ymax }) sets the panel's default position.  (Only
  1243.                xmin and    ymin values are    actually used.)     A present but empty
  1244.                Window, e.g.  `(ui-panel    obscure    on {})'    causes interactive
  1245.                positioning.
  1246.  
  1247.       `(ui-target       ID [yes|no])'
  1248.  
  1249.  
  1250.  
  1251.      Page 19                        (printed 12/22/98)
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  1259.  
  1260.  
  1261.  
  1262.                Set the target of user actions (the selected line of the
  1263.                target object browser) to ID.  The second argument specifies
  1264.                whether to make ID the current object regardless    of its type.
  1265.                If `no',    then ID    becomes    the current object of its type
  1266.                (geom or    camera).  The default is `yes'.     This command may
  1267.                result in a change of motion modes based    on target choice.
  1268.  
  1269.       `(uninterest (COMMAND    [args]))'
  1270.            Undoes the effect of an `interest' command.  (COMMAND [args]) must
  1271.            be identical to those used in the `interest' command.
  1272.  
  1273.       `(update [timestep_in_seconds])'
  1274.            Apply each incremental motion once.  Uses timestep if it's present and
  1275.            nonzero;    otherwise motions are proportional to elapsed real time.
  1276.  
  1277.       `(update-draw       CAM-ID  [timestep_in_seconds])'
  1278.            Apply each incremental motion once and then draw    CAM-ID.
  1279.            Applies `timestep' seconds' worth of motion, or uses elapsed real
  1280.            time if `timestep' is absent or zero.
  1281.  
  1282.       `(window       CAM-ID  WINDOW)'
  1283.            Specify attributes for the window of CAM-ID, e.g. its size
  1284.            or initial position, in the OOGL    Window syntax.
  1285.            The special CAM-ID `default' specifies
  1286.            properties of future windows (created by    `camera' or
  1287.            `new-camera').
  1288.  
  1289.       `(winenter       CAM-ID)'
  1290.            Tell geomview that the mouse cursor is in the window
  1291.            of CAM-ID.  This    function is for    development purposes
  1292.            and is not intended for general use.
  1293.  
  1294.       `(write {command,geometry,camera,transform,window} FILENAME [ID|(ID ...)] [self|world|universe|otherID])'
  1295.            write description of ID in given    format to FILENAME.  Last
  1296.            parameter chooses coordinate system for geometry    & transform:
  1297.            self: just the object, no transformation    or appearance (geometry    only)
  1298.            world: the object as positioned within the World.
  1299.            universe: object's position in universal    coordinates;
  1300.            includes    Worldtransform
  1301.            other ID: the object transformed    to otherID's coordinate    system.
  1302.  
  1303.            A filename of `-' is a special case: data are written to    the
  1304.            stream from which the 'write' command was read.    For external
  1305.            modules,    the data are sent to the module's standard input.
  1306.            For commands not    read from an external program, `-' means
  1307.            geomview's standard output.  (See also the `command'
  1308.            command.)
  1309.  
  1310.            The ID can either be a single id    or a parenthesized list    of
  1311.            ids, like `g0' or `(g2 g1 dodec.off)'.
  1312.  
  1313.       `(write-comments FILENAME GEOMID PICKPATH)'
  1314.  
  1315.  
  1316.  
  1317.      Page 20                        (printed 12/22/98)
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.      GGGGeeeeoooommmmvvvviiiieeeewwww((((5555))))GGGGeeeeoooommmmeeeettttrrrryyyy    CCCCeeeennnntttteeeerrrr ((((TTTThhhhuuuu DDDDeeeecccc    11112222 00002222::::44441111::::22223333 CCCCSSSSTTTT    1111999999996666GGGG))))eeeeoooommmmvvvviiiieeeewwww((((5555))))
  1325.  
  1326.  
  1327.  
  1328.            write OOGL COMMENT objects in the GEOMID    hierarchy at the
  1329.             level of the pick path to FILENAME.    Specifically, COMMENTS
  1330.             at level (a    b c ...    f g) will match    pick paths of the form
  1331.             (a b c ... f *) where * includes any value of g, and also
  1332.             any    values of possible further indices h,i,j, etc. The pick
  1333.             path (returned in the `pick' command) is a list of
  1334.             integer counters specifying    a subpart of a hierarchical
  1335.             OOGL object. Descent into a    complex    object (LIST or    INST)
  1336.             adds a new integer to the path. Traversal of simple    objects
  1337.             increments the counter at the current level.
  1338.             Individual COMMENTS    are enclosed by    curly braces, and the
  1339.             entire string of zero, one,    or more    COMMENTS (written in
  1340.             the    order in which they are    encountered during hierarchy
  1341.             traversal) is enclosed by parentheses.
  1342.  
  1343.                Note that arbitrary data    can only be passed through the OOGL
  1344.             libraries as full-fledged OOGL COMMENT objects, which can be
  1345.             attached to    other OOGL objects via the LIST    type as    described
  1346.             above. Ordinary comments in    OOGL files (i.e. everything after
  1347.             '#'    on a line) are ignored at when the file    is loaded and
  1348.             cannot be returned.
  1349.  
  1350.       `(write-sexpr        FILENAME LISPOBJECT)'
  1351.            Writes the given    LISPOBJECT to FILENAME.    This function is intended
  1352.            for internal debugging use only.
  1353.  
  1354.       `(xform       ID TRANSFORM)'
  1355.            Concatenate TRANSFORM with the current transform    of the object
  1356.            (apply TRANSFORM    to object ID).
  1357.  
  1358.       `(xform-incr       ID TRANSFORM)'
  1359.            Apply continual motion: concatenate TRANSFORM with the current
  1360.            transform of the    object every refresh (set object ID's
  1361.            incremental transform to    TRANSFORM).
  1362.  
  1363.       `(xform-set       ID TRANSFORM)'
  1364.            Overwrite the current object transform with TRANSFORM (set
  1365.            object ID's transform to    TRANSFORM).
  1366.  
  1367.       `(zoom       CAM-ID FACTOR)'
  1368.            Zoom CAM-ID, multiplying    its field of view by FACTOR.
  1369.            FACTOR should be    a positive number.
  1370.  
  1371.  
  1372.  
  1373.       Info file: geomview,      -*-Text-*-
  1374.       produced by texinfo-format-buffer
  1375.       from file: geomview.tex
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.      Page 21                        (printed 12/22/98)
  1384.  
  1385.  
  1386.  
  1387.